/*差分约束
* (1)求不等式组的可行解
    源点需要满足的条件: 从源点出发，一定可以走到所有的边，
* 步骤:
    [1]先将每个不等式 xi<= xj+ ck,转化成一条从xj走到xi,长度为ck的一条边
    [2]找一个超级源点，使得该源点一定可以遍历到所有边
    [3]从源点求一遍单源最短路

    结果1: 如果存在负环，!则原不等式组一定无解
    结果2: 如果没有负环，则dist[i]就是原不等式组的一个可行解
* (2)如何求最大值或者最小值，这里的最值指的是每个变量的最值

* 结论: 如果求的是最小值，则应该求最长路;如果求的是最大值，则应该求最短路，

* 本题: S[i]表示：1~i中被选出数的个数。我们最终要求解的就是S[50001]的最小值的最小值，因此需要使用最长路径。
*      (1) 对于S[i] >= S[i-1] 
       (2) S[i]-S[i-1] <= 1 <-> S[i-1] >= S[i]-1
       (3) 区间[a, b]中至少有c个数 <-> S[b] - S[a-1] >= c <-> S[b] >= S[a-1] + c[i]
*/

#pragma GCC optimize("O1,O2,O3,Ofast")
#pragma GCC optimize("no-stack-protector,unroll-loops,fast-math,inline")
#pragma GCC target("avx,avx2,fma")
#pragma GCC target("sse,sse2,sse3,sse4,sse4.1,sse4.2,ssse3")

#include<iostream>
#include<cstring>
#include<queue>
// #define ONLINE_GUDGE
using namespace std;
const int N = 50010, M = 150010, INF = 0x3f3f3f3f;

int n, m;
int e[M], ne[M], h[N], w[M], idx;
bool st[N]; // 是否从当前点找到最短路径
int dist[N];

void AddEdge(int a, int b, int c)
{
    e[idx] = b, ne[idx] = h[a], w[idx] = c, h[a] = idx ++ ;
}

// spfa 从边出发 适合稀疏图

void spfa()
{
    memset(st, 0, sizeof st);
    memset(dist, -0x3f, sizeof dist);

    dist[0] = 0;
    queue<int> q; 
    q.push(0);
    st[0] = true; // 放入队列 

    while(q.size())
    {
        auto u = q.front();q.pop();

        st[u] = false;

        for(int i = h[u]; ~i; i = ne[i])
        {
            int v = e[i];
            if(dist[v] < dist[u] + w[i]){ // 这个权值更新终点，对整体结果有影响
                dist[v] = dist[u] + w[i];
                if(!st[v])
                {
                    st[v] = true; // 放入队列
                    q.push(v);
                }
            }
        }
    }

}

signed main()
{
    #ifdef ONLINE_JUDGE

    #else
    freopen("./in.txt","r",stdin);
    #endif
    ios::sync_with_stdio(false);   
	cin.tie(0);

    memset(h, -1, sizeof h);
    cin >> n;
    
    for (int i = 1; i <= 50001; i++) {
        AddEdge(i - 1, i, 0);
        AddEdge(i, i - 1, -1);
    }

    for (int i = 0; i < n; i++) {
        int a, b, c; cin >> a >> b >> c;
        AddEdge(a, b+1, c);
    }

    spfa();
    cout << dist[50001] << endl;
    return 0;
}